/*
 * create:2016年4月16日 上午10:51:46
 * author:wangds  
 */
package net.wangds.comp.endpoint.http;

/**
 * .
 * @author wangds
 *
 */
public class DefaultHttpEndPoint<P,R> extends AbstractHttpEndPoint{

  private HttpRequestAccessInterpreter<P> requestInterpreter;
  private HttpResponseAccessInterpreter<R> responseInterpreter;
  private HttpInputOutputProcessor<P,R> inputOutputProc;
  
  /**
   * The getter method of the property requestInterpreter.
   * @author wangds 2016年4月16日 上午11:40:20.
   * @return the requestInterpreter.
   */
  public HttpRequestAccessInterpreter<P> getRequestInterpreter() {
    return requestInterpreter;
  }

  /**
   * The setter method of the property requestInterpreter.
   * @param therequestInterpreter the requestInterpreter to set
   * @author wangds 2016年4月16日 上午11:40:20.
   */
  public void setRequestInterpreter(HttpRequestAccessInterpreter<P> requestInterpreter) {
    this.requestInterpreter = requestInterpreter;
  }



  /**
   * The getter method of the property responseInterpreter.
   * @author wangds 2016年4月16日 上午11:40:20.
   * @return the responseInterpreter.
   */
  public HttpResponseAccessInterpreter<R> getResponseInterpreter() {
    return responseInterpreter;
  }



  /**
   * The setter method of the property responseInterpreter.
   * @param theresponseInterpreter the responseInterpreter to set
   * @author wangds 2016年4月16日 上午11:40:20.
   */
  public void setResponseInterpreter(HttpResponseAccessInterpreter<R> responseInterpreter) {
    this.responseInterpreter = responseInterpreter;
  }

  
  
  /**
   * The getter method of the property inputOutputProc.
   * @author wangds 2016年4月16日 下午12:13:37.
   * @return the inputOutputProc.
   */
  public HttpInputOutputProcessor<P, R> getInputOutputProc() {
    return inputOutputProc;
  }

  /**
   * The setter method of the property inputOutputProc.
   * @param theinputOutputProc the inputOutputProc to set
   * @author wangds 2016年4月16日 下午12:13:37.
   */
  public void setInputOutputProc(HttpInputOutputProcessor<P, R> inputOutputProc) {
    this.inputOutputProc = inputOutputProc;
  }

  /*
   * @see net.wangds.common.processor.Processor#process()
   * @author wangds 2016年4月16日 上午10:51:58.
   */
  @Override
  public void process() throws Exception {
    this.getLogger().info("endpoint:"+this.getHttpRequest().getRequestURL().toString());
    this.getLogger().info("net.wangds.comp.endpoint.http.DefaultHttpEndPoint.process()");
    HttpAccessContext ctx = new DefaultHttpAccessContext(this);
    HttpRequestAccessInterpreter<P> req_itp = this.getRequestInterpreter();
    req_itp.interpreter(ctx);
    P input = req_itp.getInterpreterResult();
    this.inputOutputProc.setHttpAccessContext(ctx);
    this.inputOutputProc.setIntput(input);
    this.inputOutputProc.process();
    R output = this.inputOutputProc.getResult();
    HttpResponseAccessInterpreter<R> rsp_itp = this.getResponseInterpreter();
    rsp_itp.setResponse(output);
    rsp_itp.interpreter(ctx);
  }

}
